<header>
    如何实现一个进度打印？
</header>
<h2>
    清除行
</h2>
<p>
    进度打印的第一步是实现单行打印，而这就需要实现如何删除当前前n行内容：
</p>
<pre tag="javascript">
const MOVE_LEFT = Buffer.from('1b5b3130303044', 'hex').toString();
const MOVE_UP = Buffer.from('1b5b3141', 'hex').toString();
const CLEAR_LINE = Buffer.from('1b5b304b', 'hex').toString();

function clearnLine(n){
    for (let index = 0; index < n; index++) {
        process.stdout.write(MOVE_LEFT + CLEAR_LINE + MOVE_UP);
    }
}
</pre>
<h2>
    实现单行打印
</h2>
<p>
    基于“清除行”开发单行打印就很容易了：
</p>
<pre tag="javascript">
    // 用来记录前置有多少行需要回退
let prevLineCount = 0;

// 返回实际同行打印的方法
const lineLog = function (text) {
    clearnLine(prevLineCount);  // 清除屏幕
    console.log(text); // 打印
    prevLineCount = text.split('\n').length;  // 重新计算需要回滚多少行
}
</pre>
<div class="tips">
    有时候，一行文本可能有点多，会进行换行，因此一行文本
    <span class="warn">
        linetext
    </span>
    实际需要回滚多少行，还可以进一步进行计算：
    <span class="warn">
        linetext / process.stdout.columns
    </span>，取其和1的最大值即可（因为还可能是空行）。
</div>
<h2>
    进度打印
</h2>
<p>
    现在，是时候实现进度打印了：
</p>
<pre tag="javascript">
/**
* 进度打印
* @param { number } percentum 进度0-100 
* @param { string } text 说明文字,可选择
*/
const processLog = function (percentum, text) {
    if (arguments.length <= 1) text = "";

    let txt = "",i = 0;

    // 补充已经有的进度
    for (; i <= percentum && i <= 100; i += 5) { txt += "█"; }

    // 补充余下的空白
    for (; i <= 100; i += 5) { txt += "░";}

    lineLog(percentum.toFixed(2) + "%[" + txt + "]" + text);
};
</pre>
<h3>
    使用例子
</h3>
<pre tag="javascript">
let deep = 0;
let interval = setInterval(function () {
    deep += Math.random() * 3;

    if (deep >= 100) {
        clearInterval(interval);
        deep = 100;
    }

    processLog(deep, "正在加载文件，请稍等片刻");
}, 200);
</pre>